package com.jxauaia.contest.service.impl;

import com.jxauaia.contest.service.FileService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.UUID;

@Service
public class FileServiceImpl implements FileService {

    @Value("${file.upload.path:d:/Computer_design/contest/uploads}")
    private String uploadPath;
    
    // 默认头像的数量
    private static final int DEFAULT_AVATAR_COUNT = 15; // 假设有15个默认头像
    
    private final Random random = new Random();

    /**
     * 上传文件
     * @param file 文件
     * @param subDir 子目录
     * @return 文件访问路径
     */
    @Override
    public String uploadFile(MultipartFile file, String subDir) throws IOException {
        // 检查文件是否为空
        if (file.isEmpty()) {
            throw new IOException("文件为空");
        }

        // 获取文件名和扩展名
        String originalFilename = file.getOriginalFilename();
        String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
        
        // 生成新的文件名
        String newFileName = UUID.randomUUID().toString() + extension;
        
        // 确保目录存在
        String dirPath = uploadPath + File.separator + subDir;
        File dir = new File(dirPath);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        
        // 保存文件
        Path filePath = Paths.get(dirPath + File.separator + newFileName);
        Files.write(filePath, file.getBytes());
        
        // 返回文件访问路径
        return "/api/uploads/" + subDir + "/" + newFileName;
    }
    
    /**
     * 获取随机默认头像
     * @return 随机头像的URL
     */
    @Override
    public String getRandomAvatar() {
        // 生成1到DEFAULT_AVATAR_COUNT之间的随机数
        int avatarIndex = random.nextInt(DEFAULT_AVATAR_COUNT) + 1;
        
        // 返回对应的头像URL
        return "/api/static/avatars/avatar" + avatarIndex + ".png";
    }
    
    /**
     * 获取所有可用的头像列表
     * @return 头像URL列表
     */
    @Override
    public List<String> getAllAvatars() {
        List<String> avatars = new ArrayList<>();
        // 添加预设头像的URL
        for (int i = 1; i <= DEFAULT_AVATAR_COUNT; i++) {
            avatars.add("/api/static/avatars/avatar" + i + ".png");
        }
        return avatars;
    }
}